# 1 设置私有属性和方法语法: 双下划线开头 eg: self.__money  def __make_cake()
# 2 私有属性和方法只能在类的内部使用, 不能被继承
# 3 私有属性通过set_xxx get_xxx方法 获取和修改
# 4 私有方法, 再设置一个公共接口来访问
# 5 总之: 私有属性和私有方法,只能在类的内部使用,不用在类的外部使用. 如果想用通过公共接口使用


# 1 定义master类 init方法 make_cake方法
class Master(object):
    def __init__(self):
        self.kongfu = '[传统方法]'
        pass

    def make_cake(self):
        print(f'使用master-{self.kongfu}摊煎饼')
        pass


# 2 定义徒弟类 继承Master
class Prentice(Master):
    def __init__(self):
        self.kongfu = '[独创摊煎饼技术]'
        # 1-1 私有属性 不能被继承
        self.__money = 2000000
        pass

    # 1-2 私有属性通过set_xxx get_xxx方法 获取和修改
    def get_money(self):
        return self.__money

    # 1-3 私有属性通过set_xxx get_xxx方法 获取和修改
    def set_money(self, money):
        self.__money = money

    # 2-1  私有方法 不能被继承
    # 现实意义: Prentice不想把__make_cake方法传递给 徒孙类
    def __make_cake(self):
        print('私有方法')
        print(f'使用Prentice-{self.kongfu}摊煎饼')
        pass

    # 2-2 通过公共接口, 访问私有方法
    def make(self):
        self.__make_cake()
        pass


# 3 徒孙类 继承徒弟类
class Tusun(Prentice):
    pass


if __name__ == '__main__':

    # 1 实例化 徒孙类对象
    mytusun01 = Tusun()

    # 2 无法直接使用父类的私有属性
    # print(mytusun01.__money) # 1 无法使用父类的 私有属性
    print(mytusun01.get_money())
    mytusun01.set_money(2100000)
    print(mytusun01.get_money())

    print('-----------------')
    # 3 无法直接使用父类的私有方法
    mytusun01.make_cake() # 注意 貌似调用了父类的make_cake, 仔细确认:是调用了Master类的make_cake方法

    print('-----------------')
    mytusun01.make()
    print('多层继承 End')





